<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- js中，正则表达式常用于两个字符串方法：search()、replace() -->
    <!-- search()用于检索字符串中指定的子字符串，或检索与正则表达式相匹配的子字符串，并返回子串的起始位置 -->
    <!-- replace()用于在字符串中用一些字符替换另一些字符，或者替换一个与正则表达式匹配的子串 -->
    <script>
        var string="hello shuang shuang ya !";
        // search()方法可以用字符串作为参数，字符串参数会转换为正则表达式，返回子串的起始位置
        var n = string.search("shuang");
        document.write(n + "<br />");

        // replace() 使用正则表达式，返回新的字符串（原字符串内容不)
       var str = string.replace(/shuang/i, "xiao");
        document.write(str + "<br />");
         // replace() 使用字符串参数，返回新的字符串（原字符串内容不)
        var strr = string.replace("shuang","bangbang");
        document.write(strr+"<br />");
    </script>
    

    <!-- 正则表达式语法：/正则表达式主体/修饰符（可选） -->
    <!-- 正则表达式修饰符：
        i,忽略大小写；
        g,全局匹配（而不是找到第一个匹配后就停止）；
        m,多行匹配。 -->
    <!-- 正则表达式模式：
        方括号用于查找某个范围内的单个字符：
            [abc],查找方括号之间的任何字符（查找 a|b|c,并返回第一个字符所在位置）；
            [0-9],查找任何从0~9的数字（查找 0|1|2|3|4|5|6|7|8|9,并返回第一个字符所在位置）；
            (name1|name2),查找由 | 分隔的任何选项。； -->
    <!-- 元字符/特殊字符：
         \d:查找数字；
         \s:查找空白字符；
         \b:匹配单词边界；
         \uxxx:查找以16进制数xxxx规定的Unicode字符。 -->

    <script>
        var s1 = "asdfghjklzxcvbnmqwertyuiop";
        var n1 = s1.search(/[ajh]/i);
        document.write("search [abc] result:  " + n1 + "<br />");

        var s2 = "asdfghjkl66+131.054564zxcvbnmqwertyuiop";
        var n2 = s2.search(/[0-9]/i);
        document.write("search [0-9] result:  " + n2 + "<br />");

        var s3 = "re, green, red, green, gren, gr, blue, yellow";
        var patt1 = /(red|green)/g; 
        var patt2 = /[red|green]/g;
        var result = s3.match(patt1);
        var result2 = s3.match(patt2);
        document.write("圆括号 result:  " + result + "<br />");//圆括号输出整个单词
        document.write("方括号 result2:  " + result2 + "<br />");//方括号输出单个字符
    </script>

    <!-- 正则表达式对象：
        在js中，RegExp对象是一个预定义了属性和方法的正则表达式对象。 -->
        <!-- 使用test():
            test()方法是一个正则表达式方法；
            test()方法用于检测一个字符串是否匹配某个模式，如果字符串中含有匹配的文本返回true，否则返回false。
        使用exec():
            exec()方法是一个正则表达式方法；
            exec()方法用于检索字符串中的正则表达式的匹配，返回一个存放匹配结果的数组，如未找到匹配返回null。 -->

    <script>
        var patt = /e/;
        var testResult = patt.test("the best things in life are free!")
        document.write("test() result:  " + testResult + "<br />");
        var execResult = /e/.exec("The best things in the life are free!");
        document.write("execResult:  " + execResult + "<br />");

    </script>
</body>
</html>